home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / ApiHooks 3.0 / HookApi.inc < prev    next >
Encoding:
Text File  |  2000-06-18  |  4.4 KB  |  112 lines

  1. ;------------------------------------------------------------------------
  2. ;Following exported functions (in fact one function with A and W)
  3. ;are really hilevel. They only prepare dynamic hooks with 1 API
  4. ;wanted to hook in the current process. Then call EAH. Moreover check
  5. ;for Visual Basic structures is made.
  6. ;------------------------------------------------------------------------
  7. PUBLIC       HookApiA
  8. HookApiA           PROC  ModuleExport, ApiNameOrOrd, dwFlags, ModuleImport,\
  9.                          UnhookAddresses, NewApi, ExcludeBases
  10.    LOCAL     DynaHook[3]: API_HOOK           ;x dynamic hooks = x + 2 AH structures
  11.    LOCAL     UnhookAddresses4VB: API_UNHOOK  ;for Visual Basic
  12.    CMP       ModuleExport, HOOKS_END         ;if empty hook was passed -> success
  13.    oMOV      EAX, ErrorSuccess
  14.    JE        HookApiEnd
  15.    
  16.   ;prepare 1st AH structure
  17.    oMOV      DynaHook[0*API_HOOK].ModuleExport, HOOKS_DYNAMIC
  18.    oMOV      DynaHook[0*API_HOOK].UnhookAddresses, ExcludeBases
  19.  
  20.   ;prepare  UnhookAddresses
  21.    MOV       EAX, UnhookAddresses
  22.    TEST      EAX, EAX
  23.    JE        NoUnhook
  24.    ASSUME    EAX: PTR API_UNHOOK
  25.    MOV       ECX, [EAX].MaxNoAddr
  26.    TEST      ECX, ECX
  27.    JNE       @F
  28.    MOV       EAX, ECX      ;if empty Unhook
  29.    JMP       NoUnhook      ;prepare nothing
  30.    
  31.   ;check for VB WhereWhat structures
  32.   ;because in VB  RealWhereWhat == VBWhereWhat+12
  33.   @@:
  34.    MOV       EDX, [EAX].WhereWhat
  35.    MOV       EAX, [EAX].CurNoAddr
  36.    ASSUME    EAX: NOTHING
  37.    CMP       DWORD PTR [EDX+04H], 8       ;VB specific
  38.    JNE       @F                           ;not VB
  39.    CMP       DWORD PTR [EDX+0CH], 10000H  ;check pointer
  40.    JB        @F                           ;not VB
  41.    MOV       EDX, [EDX+0CH]               ;fix WhereWhat
  42.   @@:
  43.    PUSHp     ECX , EAX, EDX
  44.    POPc      UnhookAddresses4VB.MaxNoAddr,UnhookAddresses4VB.CurNoAddr,\
  45.              UnhookAddresses4VB.WhereWhat
  46.    LEA       EAX, UnhookAddresses4VB
  47.   ;UnhookAddresses are prepared
  48.  
  49.   ;Fill in 2nd AH strucure with passed parametrs ...
  50.   NoUnhook:
  51.    PUSHp     ModuleExport, ApiNameOrOrd,\
  52.              dwFlags, ModuleImport,\
  53.              EAX, NewApi
  54.    LEA       EAX, DynaHook
  55.    POPc      DynaHook[1*API_HOOK].ModuleExport, DynaHook[1*API_HOOK].ApiNameOrOrd,\
  56.              DynaHook[1*API_HOOK].dwFlags, DynaHook[1*API_HOOK].ModuleImport,\
  57.              DynaHook[1*API_HOOK].UnhookAddresses, DynaHook[1*API_HOOK].HookAddress
  58.  
  59.   ;... and 3rd AH structure with hooks end
  60.    oMOV      DynaHook[2*API_HOOK].ModuleExport, HOOKS_END
  61.  
  62.   ;call it with current process id
  63.    sWin32    EstablishApiHooksA, EAX, CurPID
  64.  
  65.    MOV       ECX, UnhookAddresses
  66.    JECXZ     HookApiEnd
  67.    CMP       (API_UNHOOK PTR [ECX]).MaxNoAddr, 0
  68.    JE        HookApiEnd
  69.  
  70.   ;update CurNoAddr in passed UnhookAddresses
  71.    oMOV      (API_UNHOOK PTR [ECX]).CurNoAddr, UnhookAddresses4VB.CurNoAddr
  72.  
  73.   HookApiEnd:
  74.    RET
  75.   HookApiA         ENDP
  76. ;------------------------------------------------------------------------
  77. ;Only convert unicode strings to ansi and call HookApiA
  78.  
  79. PUBLIC       HookApiW
  80.   HookApiW         PROC  USES EBX ESI EDI, ModuleExport, ApiNameOrOrd, dwFlags,\
  81.                          ModuleImport, UnhookAddresses, NewApi, ExcludeBases
  82.    LOCAL     ModuleExportA[MAX_PATH]: ACHAR
  83.    LOCAL     ApiNameOrOrdA[MAX_PATH]: ACHAR
  84.    LOCAL     ModuleImportA[MAX_PATH]: ACHAR
  85.  
  86.    MOV       ESI, ModuleExport
  87.    TEST      ESI, ESI
  88.    JE        DoApiNameOrOrd      ;don't convert special constants
  89.    MOV       EAX, ESI
  90.    LEA       ESI, ModuleExportA
  91.    iWin32    WideCharToMultiByte, CP_ACP, NULL, EAX, -1, ESI, MAX_PATH, NULL, NULL
  92.   DoApiNameOrOrd:
  93.    MOV       EDI, ApiNameOrOrd
  94.    CMP       EDI, 10000H
  95.    JB        DoModuleImport      ;it is ordinal
  96.    MOV       EAX, EDI
  97.    LEA       EDI, ApiNameOrOrdA
  98.    iWin32    WideCharToMultiByte, CP_ACP, NULL, EAX, -1, EDI, MAX_PATH, NULL, NULL
  99.   DoModuleImport:
  100.    MOV       EBX, ModuleImport
  101.    TEST      EBX, EBX
  102.    JE        CallHookApiA
  103.    CMP       EBX, ALL_MODULES    ;don't convert special constants
  104.    JE        CallHookApiA
  105.    MOV       EAX, EBX
  106.    LEA       EBX, ApiNameOrOrdA
  107.    iWin32    WideCharToMultiByte, CP_ACP, NULL, EAX, -1, EBX, MAX_PATH, NULL, NULL
  108.   CallHookApiA:
  109.    sWin32    HookApiA, ESI, EDI, dwFlags, EBX, UnhookAddresses, NewApi, ExcludeBases
  110.    RET
  111.   HookApiW         ENDP
  112. ;------------------------------------------------------------------------